//写一个函数，求两个整数之和，要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 
//
// 
//
// 示例: 
//
// 输入: a = 1, b = 1
//输出: 2 
//
// 
//
// 提示： 
//
// 
// a, b 均可能是负数或 0 
// 结果不会溢出 32 位整数 
// 
// Related Topics 位运算 数学 
// 👍 205 👎 0


package leetcode.editor.cn1;

//Java：不用加减乘除做加法

/**
 * 考察位运算
 */
public class BuYongJiaJianChengChuZuoJiaFaLcof {
    public static void main(String[] args) {
        Solution solution = new BuYongJiaJianChengChuZuoJiaFaLcof().new Solution();
        // TO TEST
        System.out.println(solution.add(1,1));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        // 考察位运算
        public int add(int a, int b) {
            int tmp1 = -1, tmp2 = -1;
            while (a != 0 && b != 0) {
                // 计算不进位的情况
                tmp1 = a ^ b;
                // 计算进位的情况
                tmp2 = (a & b) << 1;
                a = tmp1;
                b = tmp2;
            }
            return a ^ b;
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)

}
